package com.wy.util;

import org.apache.commons.lang3.RandomUtils;
import sun.tools.jar.resources.jar;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

/**
 * jdk8，日期工具类
 */
public class Date8Utils {
    public static void main(String[] args) {
        //System.out.println(getFormarDate(LocalDate.now(),"yyyy-MM-dd"));
       // System.out.println(getLastDayOfMonth("2021-02-12",false));
        System.out.println(addDay("2021-02-25",-4));

    }
    static  DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    //①　获取指定范围的随机日期 （10分）
    public static String randomDateTime(String startDay, String endDay){
        LocalDate start = LocalDate.parse(startDay);//String转LocalDate
        LocalDate end = LocalDate.parse(endDay);//String转LocalDate
        long between = ChronoUnit.DAYS.between(start,end);//计算两个LocalDate的天数差
        Random random = new Random();
        LocalDate minus = end.minus(random.nextInt((int)between), ChronoUnit.DAYS);//用结束时间减去（时间差-0直接的1个随机数）
        return fmt.format(minus);
    }
    //②　根据生日获取年龄（10分）
    public static Integer getAge(String birthday) {
        LocalDate date = LocalDate.parse(birthday, DateTimeFormatter.ISO_DATE);
        Long until = date.until(LocalDate.now(), ChronoUnit.YEARS);
        return until.intValue();
    }
    //③　获取一个人性化日期（10分）
    public static String getFormarDate(LocalDate date,String format){
        DateTimeFormatter sdf = DateTimeFormatter.ofPattern(format);
        return sdf.format(date);
    }
    //④　获取指定日期的月初 true（10分）
    //⑤　获取指定日期的月末 false（10分）
    public static String getLastDayOfMonth(String curDate, boolean firstOrLast) {
        if (firstOrLast) {
            return LocalDate.parse(curDate, DateTimeFormatter.ofPattern("yyyy-MM-dd")).with(TemporalAdjusters.firstDayOfMonth()).toString();
        } else {
            return LocalDate.parse(curDate, DateTimeFormatter.ofPattern("yyyy-MM-dd")).with(TemporalAdjusters.lastDayOfMonth()).toString();
        }
    }

    //用指定日期加减天数（10分）
    public static String addDay(String date,int day){
        LocalDate start = LocalDate.parse(date);
        LocalDate minus = start.minus(-day, ChronoUnit.DAYS);
        return fmt.format(minus);
    }
}
